#include"Operator.h"

//!= > >= <=
bool Date::operator!=(const Date&d1 )
{
    return !(*this==d1);
}

bool Date:: operator>(const Date&d1 )
{
    return !(*this<d1);
}

bool Date::operator>=(const Date&d1 )
{
    return!(*this<=d1);
}
bool Date::operator<=(const Date&d1 )
{
    return (*this==d1)||(*this<d1);
}


//日期天数
int Date::GetMonthDay(const int year, const int month)
{
    static int arr[]={0,31,	28,	31,	30,	31,	30,	31,	31,	30,	31,	30,	31};

    if(month==2)
    {
        if(year%4==0&&year%100!=0||year%400==0)
        {
            return arr[month]+1;
        }
    }
    return arr[month];
}


// 日期 + - += -= 日期
Date& Date::operator+=(int day)
{
    if(day<0)
    {
        *this=(*this).operator-=(day);
    }
    else
    {
        _day+=day;
        while(_day>GetMonthDay(_year, _month))
        {
            _day-=GetMonthDay(_year, _month);
            _month++;
            if(_month>13)
            {
                -_year++;
                _month=1;
            }
        }
    }


    return *this;
}

// 日期+天数
Date Date::operator+(int day)
{
    Date tmp=*this;
    tmp+=day;
    return tmp;
}



// 日期-=天数
Date& Date::operator-=(int day)
{
    if(day<0)
    {
        _day-=-day;
    }
    else
    {
        _day-=day;
    }
    while(_day<0)
    {
        _month--;
        _day+=GetMonthDay(_year, _month);
        if(_month<1)
        {
            _year--;
            _month=12;
        }
    }
    return *this;
}

// 日期-天数
Date Date::operator-(int day)
{
    Date tmp=*this;
    tmp-=day;
    return tmp;
}

Date& Date::operator++()
{
    _day++;
    if(_day> GetMonthDay(_year,_month))
    {
        _day-=GetMonthDay(_year,_month);
        _month++;
        if(_month<13)
        {
            _year++;
            _month=1;
        }
    }
      return *this;
}

Date Date::operator++(int)//一个int代表他是后置
{
    Date tmp=*this;
    ++*this;

    return tmp;

}
Date Date::operator--(int)
{
    Date tmp=*this;
   --*this;

   return tmp;

}
Date& Date:: operator--()
{
    --_day;
    if(_day<0)
    {
        --_month;
        _day+=GetMonthDay(_year,_month);
        if(_month<1)
        {
            _year--;
            _month=12;
        }
    }
    return *this;
}
